<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>


    <script>

        // 增加数组元素
        let a = [];

        // 直接赋值法
        a[a.length] = 0;
        console.log(a)

        // a[100] = '33'   // 中间的元素默认是空的

        // push方法
        a.push(1)
        console.log(a)

        // 一次插入一个数组，使用展开语法
        let b = ['a', 'b']
        a.push(...b)
        console.log(a)     // (4) [0, 1, "a", "b"]



        // 弹出元素，最后一个元素
        console.log(a.pop()); // b
        console.log(a) // (3) [0, 1, "a"]

        // 从队头删除（第一个元素则被删除），模拟的是队列出队
        console.log(a.shift())
        console.log(a)

        // 从队头插入
        console.log(a.unshift(1, 4, 5));
        console.log(a) // [1, 4, 5, 1, "a"]

        // 填充数组
        // console.log(a.fill('a')) //  ["a", "a", "a", "a", "a"]
        // 指定填充位置
        console.log(a.fill('a', 1, 2))  //[1, "a", 5, 1, "a"]


        // 数组截取，类似于字符串的slice,不改变原数组
        console.log(a.slice(1, 3)); // ["a", 5]
        console.log(a) //  [1, "a", 5, 1, "a"]

        // 不设置参数，可以做到复制数组的效果
        let aa = a.slice();
        console.log(aa.pop())
        console.log(aa) // [1, "a", 5, 1]
        console.log(a) // [1, "a", 5, 1, "a"]

        // 增删数组元素
        // 第一个参数是删除的起始位置，第二个参数是删除的个数，返回删除的元素数组
        console.log(a.splice(0, 1)) // [1]
        console.log(a) //  ["a", 5, 1, "a"]
        // 直接给数组长度附0，清空数组
        // a.length = 0;
        // console.log(a);
        // 删除最后一个元素
        a.length = a.length - 1
        console.log(a) // ["a", 5, 1]

        // 在位置1插入2个元素
        a.splice(1, 0, 'new1', 'new2')
        console.log(a)  //  ["a", "new1", "new2", 5, 1]

        // 删除元素1，然后在位置1插入新元素
        a.splice(1, 1, "a", 'b')
        console.log(a)  // ["a", "a", "b", "new2", 5, 1]


        // 向数组后面添加若干元素
        a.splice(a.length,0,'in1','in2')
        console.log(a) // ["a", "a", "b", "new2", 5, 1, "in1", "in2"]

        // 向数组前面添加若干元素
        a.splice(0,0,"啊",'啊')
        console.log(a) //["啊", "啊", "a", "a", "b", "new2", 5, 1, "in1", "in2"]

        b = a;
        // 清空数组,但是如果有其他引用，则对象没有被释放
        console.log(a=[])
        console.log(b)

        // 使用splice清空
        b.splice(0,b.length)
        console.log(b)
    </script>
</body>

</html>